function maxValue(grid: number[][]): number {
    // 1.获取m排n列
    const m = grid.length;
    const n = grid[0].length;

    // 2.初始化dp保存每个位置的最大值
    const dp:number[][] = Array.from({length: m},()=>{
        return Array(n).fill(0)
    })
    // 让第一个位置为传入的矩阵数组里的第一个位置
    dp[0][0] = grid[0][0];

    // 3.初始化值
    // 初始化列
    for (let i = 1; i < m; i++) {
        dp[i][0] = dp[i - 1][0] + grid[i][0]
    }
    // 初始化行
    for( let j =1 ; j < n; j++) {
        dp[0][j] =  dp[0][j - 1] + grid[0][j]
    }

    //4.状态转移方程
    for( let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
            //选出当前位置上边和左边总较大的值和自身位置本来的值相加放入动态规划的当前位置
            dp[i][j] = grid[i][j] + Math.max(dp[i][j - 1] , dp[i - 1][j]) 
        }
    }

    //5.返回最终结果
    return dp[m-1][n -1]
}

console.log(maxValue([
    [1,3,1],
    [1,5,1],
    [4,2,1],
]))

export {}